package com.suoluo.zenapp.service.dest;

import java.util.List;
import java.util.Map;

import com.suoluo.zenapp.common.CommonResp;
import com.suoluo.zenapp.pojo.dest.DestExtPOJO;
import com.suoluo.zenapp.pojo.dest.DestImgResourcePOJO;
import com.suoluo.zenapp.pojo.dest.DestResourceExtPOJO;
import com.suoluo.zenapp.pojo.dest.DestResourcePOJO;
import com.suoluo.zenapp.pojo.dest.DestTextResourcePOJO;
import com.suoluo.zenapp.pojo.dest.DestTrafficPOJO;
import com.suoluo.zenapp.pojo.dest.DestVersionPOJO;
import com.suoluo.zenapp.vo.DestImgResourceVO;
import com.suoluo.zenapp.vo.DestResourceVO;
import com.suoluo.zenapp.vo.DestVO;
import com.suoluo.zenapp.vo.ParameterVO;
import com.suoluo.zenapp.vo.TripDayItemVO;
import com.suoluo.zenapp.vo.TripDayVO;
import com.suoluo.zenapp.vo.TripDestVO;
import com.suoluo.zenapp.vo.TripVO;

public interface DestService {
	/**
	 * 保存目的地信息
	 */
	public CommonResp saveDest(DestResourceVO dest);

	/**
	 * 更新目的地资源的图片，归属父类Id，层级Id
	 * 
	 * @param dest
	 */
	public void updateDest(DestResourceVO dest);

	/**
	 * 根据目的地Id查询目的地信息
	 * 
	 * @param destId
	 * @return
	 */
	public DestResourceVO findDestById(int destId);

	/**
	 * 查询目的地资源表的所有记录数
	 * 
	 * @return
	 */
	public int findDestResourceCount();

	/**
	 * 保存目的地类别下的资源
	 * 
	 * @param resource
	 */
	public void saveResource(DestResourcePOJO resource);

	/**
	 * 根据条件查询目的地资源信息
	 * 
	 * @param destName
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findListDest(ParameterVO para);

	/**
	 * 查询目的地版本信息
	 * 
	 * @return
	 */
	public List<DestVersionPOJO> findDestVersion(ParameterVO param);

	/**
	 * 用目的地Id查询目的地应用的版本信息是否已存在
	 * 
	 * @param destId
	 * @return
	 */
	public DestVersionPOJO findVersionByDestId(int destId);

	/**
	 * 保存目的地应用版本信息
	 * 
	 * @param pojo
	 */
	public void saveVersion(DestVersionPOJO pojo);

	/**
	 * 根据版本id查询版本信息
	 * 
	 * @param versionId
	 * @return
	 */
	public DestVersionPOJO findDestVersionById(int versionId);

	/**
	 * 更新版本信息
	 * 
	 * @param version
	 */
	public void updateVersion(DestVersionPOJO version);

	/**
	 * 查询应用版本信息的总记录数
	 * 
	 * @return
	 */
	public int findVersionTotal();

	public int findResourceTypeCount(int destId);

	@SuppressWarnings("rawtypes")
	public List<Map> findListResourceType(int destId);

	/**
	 * 添加目的地类别前先判断是否已经添加过了
	 * 
	 * @param destId
	 * @param name
	 * @return
	 */
	public DestResourcePOJO findDestResourceTypeByNameAndDestId(int destId,
			String name);

	/**
	 * 查询同一父节点下的最大顺序
	 * 
	 * @param destId
	 *            目的地Id
	 * @return
	 */
	public Integer findMaxOrderByParentId(int destId);

	/**
	 * 目的地类别添加成功后更新它的直接子节点数和树上的所有子节点数
	 * 
	 * @param destId
	 */
	public void updateNodeCount(int destId);

	/**
	 * 按类别查询资源项信息
	 * 
	 * @param resourceTypeId
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findListResourceTypeItem(int resourceTypeId);

	
	public CommonResp saveItem(DestResourceVO destVO);
	/**
	 * 保存目的地添加的多图
	 * @param imgVO
	 * @return
	 */
	public CommonResp saveDestImgs(DestResourceVO imgVO);
	/**
	 * 根据attachResourceId查询目的地资源图片表下的多张图片
	 * @param destId
	 * @return
	 */
	public List<DestImgResourcePOJO> findListImgs(int attachResourceId);
	/**
	 * 保存资源项的多图
	 * @param imgVO
	 * @return
	 */
	public CommonResp saveItemImgs(DestResourceVO imgVO);
	/**
	 * 根据Id查询目的地资源表的name字段值
	 * @param id
	 * @return
	 */
	public String findName(int id);
	
	/**
	 * 保存目的地信息
	 */
	public void saveType(DestResourceVO dest);
	
	/**
	 * 更新目的地的每个节点的顺序
	 * @param destID
	 */
	public void updateDestResourcesSort(int destId);
	/**
	 * 添加版本时查询所有目的地信息
	 * @return
	 */
	public List<DestResourcePOJO> findListDestName();
	/**
	 * 查询目的地下的所有资源信息
	 * @param destId
	 * @return
	 */
	public List<DestVO> findDestAllResource(int destId);
	/**
	 * 查找目的地资源的所有图片
	 * @param destId
	 * @return
	 */
	public List<DestImgResourcePOJO> findDestImg(int destId);
	/**
	 * 根据资源Id查询资源文本信息
	 * @param resourceId
	 * @return
	 */
	public DestTextResourcePOJO findDestTextResourcePOJOById(int resourceId);
	/**
	 * 根据资源Id查询资源的扩展信息
	 * @param resourceId
	 * @return
	 */
	public DestResourceExtPOJO findDestResourceExtPOJOById(int resourceId);
	/**
	 * 删除目的地下的多图信息
	 * @param invo
	 * @return
	 */
	public void deleteDestImg(DestImgResourcePOJO img);
	/**
	 * 删除特色项的多图信息
	 * @param invo
	 * @return
	 */
	public void deleteItemImg(DestImgResourcePOJO img);
	/**
	 * 更新特色项信息
	 * @param dest
	 * @param invo
	 */
	public void updateItem(DestResourceVO destVO);
	
	/**
	 * 根据Id查询图片信息
	 * @param imgId
	 * @return
	 */
	public DestImgResourcePOJO findDestResourceImgById(int imgId);
	/**
	 * 保存修改的图片
	 * @param imgPOJO
	 * @return
	 */
	public void updateDestResourceImg(DestImgResourceVO imgVO);
	/**
	 * 查找目的地扩展信息
	 * @param destId
	 * @return
	 */
	public DestExtPOJO findDestExtById(int destId);
	/**
	 * 查询目的地的交通信息
	 * @param destId
	 * @return
	 */
	public List<DestTrafficPOJO> findListDestTraffic(int destId);
	/**
	 * 保存目的地交通信息
	 * @param traffic
	 */
	public void saveDestTraffic(DestTrafficPOJO traffic);
	/**
	 * 修改目的地交通信息
	 * @param traffic
	 */
	public void updateDestTraffic(DestTrafficPOJO traffic);
	/**
	 * 删除目的地交通信息
	 * @param trafficId
	 */
	public void deleteDestTraffic(int trafficId);
	/**
	 * 根据Id查询目的地交通信息
	 * @param trafficId
	 * @return
	 */
	public DestTrafficPOJO findDestTrafficById(int trafficId);
	/**
	 * 查询目的地指定类型的交通信息
	 * @param destId
	 * @param typeId
	 * @return
	 */
	public List<DestTrafficPOJO> findListDestTrafficByTypeId(int destId,int typeId);
	/**
	 * 更新目的地类别信息
	 * @param dest
	 */
	public void updateDestType(DestResourceVO dest);
	
	/**
	 * 添加目的地时查询引用的目的地信息
	 * @param destName
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findZentravelDestByName(String destName);
	/**
	 * 添加目的地特色时查询引用的目的地特色信息
	 * @param destId
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findZentravelDestFeature(int destId);
	/**
	 * 添加目的地特色项时查询引用的目的地特色项信息
	 * @param featureId
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findZentravelDestFeatureItem(int featureId,String itemTitle);
	/**
	 * 查询行程信息
	 * @param destId
	 * @return
	 */
	public List<TripVO> findListTrips(int destId);
	
	
	/**
	 * 查询一条行程所经过的目的地
	 * @param tripId
	 * @return
	 */
	public List<TripDestVO> findListTripDest(int tripId);
	
	/**
	 * 查询行程的日程和每日行程项的详细信息，每日行程的描述信息
	 * @param tripId
	 * @return
	 */
	public List<TripDayVO> findListTripDays(int tripId);
	/**
	 * 查询行程下的行程项信息
	 * @param tripId
	 * @return
	 */
	public List<TripDayItemVO> findListTripItem(int tripId);
}
